#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Git初始化脚本
为MP4视频压缩工具项目设置Git代码管理
"""

import os
import subprocess
import sys

def check_git_installed():
    """检查Git是否已安装"""
    try:
        result = subprocess.run(['git', '--version'], 
                              capture_output=True, text=True, timeout=10)
        if result.returncode == 0:
            version = result.stdout.strip()
            print(f"✅ Git已安装: {version}")
            return True
        else:
            print("❌ Git未正确安装")
            return False
    except FileNotFoundError:
        print("❌ Git未安装")
        return False
    except Exception as e:
        print(f"❌ 检查Git时出错: {str(e)}")
        return False

def init_git_repo():
    """初始化Git仓库"""
    try:
        # 检查是否已经是Git仓库
        if os.path.exists('.git'):
            print("ℹ️  项目已经是Git仓库")
            return True
        
        # 初始化Git仓库
        result = subprocess.run(['git', 'init'], 
                              capture_output=True, text=True)
        if result.returncode == 0:
            print("✅ Git仓库初始化成功")
            return True
        else:
            print(f"❌ Git仓库初始化失败: {result.stderr}")
            return False
    except Exception as e:
        print(f"❌ 初始化Git仓库时出错: {str(e)}")
        return False

def configure_git():
    """配置Git用户信息"""
    try:
        # 检查是否已配置用户信息
        result = subprocess.run(['git', 'config', 'user.name'], 
                              capture_output=True, text=True)
        
        if result.returncode != 0 or not result.stdout.strip():
            print("\n需要配置Git用户信息:")
            
            # 获取用户输入
            name = input("请输入您的姓名: ").strip()
            email = input("请输入您的邮箱: ").strip()
            
            if name and email:
                # 配置用户名
                subprocess.run(['git', 'config', 'user.name', name])
                # 配置邮箱
                subprocess.run(['git', 'config', 'user.email', email])
                print(f"✅ Git用户信息配置完成: {name} <{email}>")
            else:
                print("⚠️  跳过用户信息配置")
        else:
            user_name = result.stdout.strip()
            result = subprocess.run(['git', 'config', 'user.email'], 
                                  capture_output=True, text=True)
            user_email = result.stdout.strip()
            print(f"ℹ️  Git用户信息已配置: {user_name} <{user_email}>")
        
        return True
    except Exception as e:
        print(f"❌ 配置Git用户信息时出错: {str(e)}")
        return False

def add_files():
    """添加文件到Git"""
    try:
        # 添加所有文件
        result = subprocess.run(['git', 'add', '.'], 
                              capture_output=True, text=True)
        if result.returncode == 0:
            print("✅ 文件添加到Git成功")
            return True
        else:
            print(f"❌ 添加文件失败: {result.stderr}")
            return False
    except Exception as e:
        print(f"❌ 添加文件时出错: {str(e)}")
        return False

def create_initial_commit():
    """创建初始提交"""
    try:
        commit_message = "Initial commit: MP4视频压缩工具项目初始化"
        result = subprocess.run(['git', 'commit', '-m', commit_message], 
                              capture_output=True, text=True)
        if result.returncode == 0:
            print("✅ 初始提交创建成功")
            return True
        else:
            print(f"❌ 创建提交失败: {result.stderr}")
            return False
    except Exception as e:
        print(f"❌ 创建提交时出错: {str(e)}")
        return False

def show_git_status():
    """显示Git状态"""
    try:
        result = subprocess.run(['git', 'status'], 
                              capture_output=True, text=True)
        if result.returncode == 0:
            print("\n📋 Git状态:")
            print(result.stdout)
        else:
            print("❌ 获取Git状态失败")
    except Exception as e:
        print(f"❌ 获取Git状态时出错: {str(e)}")

def show_git_log():
    """显示Git提交历史"""
    try:
        result = subprocess.run(['git', 'log', '--oneline', '-5'], 
                              capture_output=True, text=True)
        if result.returncode == 0 and result.stdout.strip():
            print("\n📜 最近的提交:")
            print(result.stdout)
        else:
            print("ℹ️  暂无提交历史")
    except Exception as e:
        print(f"❌ 获取提交历史时出错: {str(e)}")

def show_usage_guide():
    """显示Git使用指南"""
    print("\n" + "=" * 60)
    print("🎯 Git代码管理使用指南")
    print("=" * 60)
    
    print("\n📋 常用Git命令:")
    print("git status          # 查看文件状态")
    print("git add .           # 添加所有修改的文件")
    print("git add <文件名>    # 添加指定文件")
    print("git commit -m '消息' # 提交更改")
    print("git log             # 查看提交历史")
    print("git diff            # 查看文件差异")
    
    print("\n🔄 工作流程:")
    print("1. 修改代码")
    print("2. git add . (添加修改)")
    print("3. git commit -m '描述修改内容' (提交)")
    print("4. 重复以上步骤")
    
    print("\n🌟 推荐的提交消息格式:")
    print("feat: 添加新功能")
    print("fix: 修复bug")
    print("docs: 更新文档")
    print("style: 代码格式调整")
    print("refactor: 代码重构")
    print("test: 添加测试")
    print("build: 构建相关")
    
    print("\n📁 项目文件管理:")
    print("- .gitignore 文件已配置，会自动忽略临时文件")
    print("- 测试视频文件会被忽略，不会提交到仓库")
    print("- 构建文件和exe文件会被忽略")
    
    print("\n🚀 下一步建议:")
    print("1. 学习Git基础命令")
    print("2. 考虑使用GitHub/GitLab等远程仓库")
    print("3. 定期提交代码，记录开发进度")

def main():
    """主函数"""
    print("=" * 60)
    print("MP4视频压缩工具 - Git代码管理初始化")
    print("=" * 60)
    
    # 检查Git是否安装
    if not check_git_installed():
        print("\n❌ Git未安装，请先安装Git:")
        print("1. 访问 https://git-scm.com/download/win")
        print("2. 下载并安装Git for Windows")
        print("3. 重新运行此脚本")
        return False
    
    # 初始化Git仓库
    if not init_git_repo():
        return False
    
    # 配置Git用户信息
    if not configure_git():
        return False
    
    # 添加文件
    if not add_files():
        return False
    
    # 创建初始提交
    if not create_initial_commit():
        return False
    
    # 显示状态
    show_git_status()
    show_git_log()
    
    print("\n🎉 Git代码管理初始化完成!")
    
    # 显示使用指南
    show_usage_guide()
    
    return True

if __name__ == "__main__":
    main()
